草庐IT

Ruby array.select 多行 block

全部标签

ruby - 在 Ruby 中将字符串切成给定长度的 block 的最佳方法是什么?

我一直在寻找一种在Ruby中将字符串分块为给定长度的子字符串的优雅而高效的方法。到目前为止,我能想到的最好的是:defchunk(string,size)(0..(string.length-1)/size).map{|i|string[i*size,size]}end>>chunk("abcdef",3)=>["abc","def"]>>chunk("abcde",3)=>["abc","de"]>>chunk("abc",3)=>["abc"]>>chunk("ab",3)=>["ab"]>>chunk("",3)=>[]您可能希望chunk("",n)返回[""]而不是[]。如果

ruby - 在 Ruby 中,是否有组合 'select' 和 'map' 的数组方法?

我有一个包含一些字符串值的Ruby数组。我需要:找到所有匹配某个谓词的元素通过转换运行匹配元素以数组形式返回结果现在我的解决方案是这样的:defexamplematchingLines=@lines.select{|line|...}results=matchingLines.map{|line|...}returnresults.uniq.sortend是否有Array或Enumerable方法将select和map组合成一个逻辑语句? 最佳答案 我通常将map和compact连同我的选择标准一起用作后缀if。compact摆脱了

Ruby 数组 : select(), collect() 和 map()

映射语法:a=["a","b","c","d"]#=>["a","b","c","d"]a.map{|item|"a"==item}#=>[true,false,false,false]a.select{|item|"a"==item}#=>["a"]问如果我有:irb(main):105:0>details[1]=>{:sku=>"507772-B21",:desc=>"HP1TB3GSATA7.2KRPMLFF(3.",:qty=>"",:qty2=>"1",:price=>"5,204.34P"}我想删除这个数组中每一个数量为空的条目,或者只选择其中有一些值的条目。我试过:det

ruby - 使用 do block 与大括号 {}

ruby新手,戴上你的新手手套。以下两个片段之间是否有任何区别(模糊或实用)?my_array=[:uno,:dos,:tres]my_array.each{|item|putsitem}my_array=[:uno,:dos,:tres]my_array.eachdo|item|putsitemend我知道大括号语法可以让你把block放在一行上my_array.each{|item|putsitem}但除此之外,是否有任何令人信服的理由来使用一种语法而不是另一种语法? 最佳答案 Rubycookbook表示括号语法的优先顺序高于

ruby - 如何在没有开始和结束 block 的情况下在 Ruby 中使用 rescue

我知道开始救援结束的标准技术如何单独使用救援block。它是如何工作的,它如何知道正在监视哪些代码? 最佳答案 方法“def”可以作为“开始”语句:deffoo...rescue...end 关于ruby-如何在没有开始和结束block的情况下在Ruby中使用rescue,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1542672/

ruby-on-rails - do..end 与 Ruby 中 block 的花括号

我有一个同事积极地试图说服我不应该使用do..end而是使用花括号在Ruby中定义多行block。我坚定地坚持只对短的单行代码使用大括号,对其他一切都使用do..end。但我想我会接触更大的社区以获得一些解决方案。那么它是什么,为什么?(一些shoulda代码的例子)contextdosetup{do_some_setup()}should"dosomthing"do#somemorecode...endend或context{setup{do_some_setup()}should("dosomthing"){#somemorecode...}}就我个人而言,仅看上面的内容就可以回答

ruby-on-rails - 在不去除换行符的情况下在 Ruby 中分解多行的长字符串

我们最近决定在我的工作中使用ruby​​风格指南。其中一项法令是任何一行都不得超过80个字符。由于这是一个Rails项目,我们通常会使用稍长一些的字符串-即“用户X想向您发送有关事物Y的消息”,它并不总是适合80个字符的样式限制。我知道有三种方法可以让一个长字符串跨越多行:HEREDOC%Q{}实际的字符串连接。然而,所有这些情况最终都需要更多的计算周期,这看起来很愚蠢。显然是字符串连接,但是对于HEREDOC和%Q我必须通过类似.gsub(/\n$/,'')的方式删除换行符。是否有一种纯语法方法可以做到这一点,相当于将整个字符串放在一行中?显然,我的目标是不要仅仅因为我希望我的代码更

ruby - Ruby 中的 block 和产量

我正在尝试了解block和yield以及它们在Ruby中的工作方式。如何使用yield?我看过的许多Rails应用程序都以一种奇怪的方式使用yield。有人可以向我解释或告诉我去哪里了解它们吗? 最佳答案 是的,一开始有点费解。在Ruby中,方法可以接收代码块以执行任意代码段。当一个方法需要一个block时,您可以通过调用yield函数来调用它。例子:以Person为例,这是一个具有name属性和do_with_name方法的类。调用该方法时,它会将name属性传递给block。classPersondefinitialize(na

ruby-on-rails - 每个 'when' block 中有多个值的 Case 语句

我能描述我正在寻找的最好方法是向您展示我迄今为止尝试过的失败代码:casecarwhen['honda','acura'].include?(car)#codewhen'toyota'||'lexus'#codeend我有大约4或5种不同的when情况,它们应该由大约50种不同的car值触发。有没有办法用caseblock来做到这一点,或者我应该尝试大量的ifblock? 最佳答案 在case语句中,,等同于if语句中的||。casecarwhen'toyota','lexus'#codeendSomeotherthingsyouc

Ruby:我可以编写没有连接的多行字符串吗?

有没有办法让它看起来更好一点?conn.exec'selectattr1,attr2,attr3,attr4,attr5,attr6,attr7'+'fromtable1,table2,table3,etc,etc,etc,etc,etc,'+'whereetcetcetcetcetcetcetcetcetcetcetcetcetc'比如,有没有办法暗示串联? 最佳答案 这个答案的某些部分帮助我得到了我需要的东西(简单的多行连接,没有额外的空格),但由于没有一个实际的答案有它,我在这里编译它们:str='thisisamulti-l